package com.yunlongn.async.service;


import com.yunlongn.async.function.RetryScheduleAction;
import com.yunlongn.async.function.RetryScheduleFail;

import java.util.concurrent.TimeUnit;

/**
 * 任务失败重试工具。 按照指定的时间。定时重试任务，如果失败则回调失败函数
 * @author yunlongn
 */
public interface RetrySchedulerService {

    /**
     * 执行调度
     * @param action  返回true为成功 false为失败。 具体实现由用户决定
     * @param periods 调度周期，单位秒（例如：2,4,6,8,10，那么就是第一次失败之后隔2秒重试，
     *                第二次失败后隔4秒重试，第五次失败后隔10秒重试，如果最后一次重试都失败，则不会再重试，
     *                否则只要重试调用action返回true则自动停止）
     */
    <T> void retrySubmit(String retrySubmitId, RetryScheduleAction<T> action, int... periods);

    <T> void retrySubmit(String retrySubmitId, RetryScheduleAction<T> action, TimeUnit timeUnit, int... periods);
}
